package tech.aistar.corejava.day15.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:可缓存线程池，先查看池中有没有以前建立的线程，
 * 如果有，就直接使用。如果没有，就建一个新的线程加入池中，
 * 缓存型池子通常用于执行一些生存期很短的异步型任务
 * @date 2019/8/3 0003
 */
public class CacheThreadPoolDemo {
    public static void main(String[] args) {
        //线程池的管理的类 -  ExecutorService
        //缓冲池中可以存放多少个线程 - 理论上是没有上限的.
        ExecutorService executorService = Executors.newCachedThreadPool();

        for (int i = 0; i < 10; i++) {

//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//
//                }
//            });

            //给它到线程池中去寻找是否存在可用的线程
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //lambda表达式 - 替代匿名内部类
            //关心run方法参数()->{方法体}

            //先看池中有无空间的线程,如果没有则创建.如果有空闲的,直接使用
            executorService.execute(()->{
                System.out.println(Thread.currentThread().getName()+"正在执行...");
            });




            //不断创建新的线程 - 增加了系统的开销
            //Runable r = new XXX();
            //Thread t = new Thread(r);
            //t.start();

            //创建10个线程对象
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    System.out.println(Thread.currentThread().getName()+"正在执行...");
//                }
//            }).start();
        }
    }
}
